// 采用"函数表达式"方式定义函数
// "函数表达式": The function expression

const sum = function add( first , second ){
    console.log( `求${first}加${second}之和` );
    console.log( arguments );
    return first + second ;
}

// 如果函数表达式中 function 之后 形参之前指定过函数名称，则 返回该名称
// 否则，就会返回首次将函数赋值的变量名称 (即首次将函数赋值给那个变量就获取那个变量名)
console.log( sum.name ); // add

// add( 5 , 6 ); // ReferenceError: add is not defined

// 可以将 sum 当作普通函数使用
console.log( sum( 5 , 6 ) ); // 11

// 可以将 sum 当作构造函数使用
let x = new sum();
console.log( x );

console.log( '- - - - - - - - - - - -' );

// 采用函数表达式定义函数时，通过等号前变量就可以调用函数
const hello = (function ( name ){
    console.log( `hello,${name}.` );
})

hello( 'small jiang' );
hello( 'xiao jiang' );

console.log( '- - - - - - - - - - - -' );

(function( name ){
    console.log( arguments );
    console.log( `欢迎${name}` );
})( '小姜'  , '大姜' , 'small jiang' , 'big jiang' );


// 任务:
// 1、利用递归求 n 的阶乘
// 2、利用递归求 1 到 n 之和
// 3、利用递归求 菲波那切数列 第 n 项值